%%% % -*- coding: utf-8 -*-
%%% ----------------------------------------------------------------------------
%%% ZDSS: 西藏大学本科毕业论文模板
%%% Copyright : 2021-2024 (c) <ylxdxx@qq.com>
%%% Repository: https://gitee.com/ylxdxx/ZD-XS-template
%%% License   : The LaTeX Project Public License 1.3c
%%% ----------------------------------------------------------------------------



%格式声名
\NeedsTeXFormat{LaTeX2e}[2021-11-15]

\RequirePackage{expl3}


%This is a special version of the standard \ProvidesPackage macro, 
%which will automatically turn on LaTeX3 programming syntax and 
%more importantly turn it off at the end of the package. 
%It also deals properly with nested package loading, and
%so is the recommended way to use LaTeX3 syntax inside LaTeX2e packages.
\ProvidesExplPackage{ZDSS} % Package name
{2024-11-26} % Release date
{0.1} % Release version
{西藏大学本科毕业论文模板} % Description

%\debug_on:n{all}


%
% 定义变量
%

%基本信息
\tl_new:N   \l_ZD_thesis_type_tl %本科生 毕业论文/毕业设计
\tl_new:N   \l_ZD_college_tl % 学院
\tl_new:N   \l_ZD_major_tl % 专业
\tl_new:N   \l_ZD_thesis_title_zh_tl % 论文题目，中文
\tl_new:N   \l_ZD_student_name_tl % 学生姓名
\tl_new:N   \l_ZD_student_number_tl % 学生学号
\tl_new:N   \l_ZD_teacher_name_tl % 导师姓名
\tl_new:N   \l_ZD_teacher_title_tl % 导师职称
\tl_new:N   \l_ZD_complete_date_tl % 完成日期


%功能控制
\bool_new:N   \l_ZD_print_version_bool %是否生成打印版本PDF




%基本设置

\PassOptionsToPackage{no-math}{fontspec}%让正文中的字体设置不影响数学公式
\LoadClass[UTF8,a4paper,zihao=-4,oneside,]{ctexbook} %纸张、正文字号
%\RequirePackage{no-math}{fontspec}%此处无效，ctexbook已经先行调用




\RequirePackage[top=25mm,bottom=20mm,left=30mm,right=30mm]{geometry} %页边距




%
%字体设置
%

% 英文字体配置部分
%\setmainfont{Times New Roman}%英文正文
\setmainfont{times.ttf}[Path = fonts/, BoldFont = timesbd.ttf, ItalicFont = timesi.ttf, BoldItalicFont = timesbi.ttf]

%\setsansfont{Source Sans Pro}%英文无衬线
%\setmonofont{Source Code Pro}%英文等宽
%这里会影响公式字体出问题，需用fontspec的no-math选项解决，见上
%
% 中文字体配置部分
%

\xeCJKsetup{AutoFallBack=true} %用于生僻字显示

%自定义字体命令
\setCJKfamilyfont{WinSongTi}[Path = fonts/,AutoFakeBold=3,AutoFakeSlant=true,
							FallBack={[Path = fonts/,AutoFakeBold=3,AutoFakeSlant=true,]{simsunb.ttf}},]{simsun.ttc} %宋体
\setCJKfamilyfont{WinKaiTi}[Path = fonts/,AutoFakeBold=3,AutoFakeSlant=true,]{simkai.ttf} %楷体
\setCJKfamilyfont{WinHeiTi}[Path = fonts/,AutoFakeSlant=true,]{simhei.ttf} %黑体
%相要使用的话用 \CJKfamily{WinSongTi} 即可

%\setCJKmainfont[AutoFakeBold=true,AutoFakeSlant=true]{宋体}%中文正文
\setCJKmainfont[Path = fonts/,AutoFakeBold=3,AutoFakeSlant=true,
				FallBack={[Path = fonts/,AutoFakeBold=3,AutoFakeSlant=true,]{simsunb.ttf}},]{simsun.ttc} %正文宋体

%重定义 ctexbook 中一些字体命令
\RenewDocumentCommand{\songti}{}{\CJKfamily{WinSongTi}}
\RenewDocumentCommand{\kaishu}{}{\CJKfamily{WinKaiTi}}
\RenewDocumentCommand{\heiti}{}{\CJKfamily{WinHeiTi}}

%\emph \textbf \bfseries  \textit \itshape 等对中文有效
%也就有了中文对应的粗体和斜体
%\setCJKsansfont{黑体}%中文无衬线
%\setCJKmonofont{楷体}%中文等宽



%单个汉字字宽 \ccwd
%em、 ex
%使用粗体：\bfseries 或者 \textbf{text} 
%由于windows字体的原因，若使用加粗命令，则会变成黑体，设置成其它字体即可，例如 fontset=fontset






%\RequirePackage{titlesec}%页面样式：标题
\RequirePackage{titleps}%页面样式：页眉页脚
\RequirePackage{titletoc}%页面样式：目录
%\RequirePackage{fancyhdr}%页眉页角
%\RequirePackage{tocloft}%目录

%设置目录格式
\titlecontents{chapter}
[0pt]%左间距
{\addvspace{2pt}\zihao{4}\heiti\thecontentslabel}%格式
{}
{}%
{\titlerule*[0.5pc]{$\cdot$}\contentspage}

\titlecontents{section}
[\ccwd]%左间距
{\addvspace{1pt}\zihao{-4}\songti\thecontentslabel}%格式
{}
{}%
{\titlerule*[0.5pc]{$\cdot$}\contentspage}


%设置页眉页脚
%此处的奇偶页不同设置只有在twoside下才有效
\newpagestyle{my-body-style}[]
{
\sethead[][][]
{}{}{}
\setfoot[][\zihao{5}\thepage][]
{}{\zihao{5}\thepage}{}
}



%超链接
\RequirePackage[bookmarksnumbered,draft=false,colorlinks=true,CJKbookmarks=true,linkcolor=black,citecolor=black,urlcolor=black,hyperindex]{hyperref}
% bookmarksnumbered 在pdf书签中加入章节序号




%\RequirePackage[font=small,labelfont={bf,color=main}]{caption,subcaption}%对图片表格标题和子标题的控制
% 采用带圈数字符号代替*号脚注
%\xeCJKsetcharclass{`①}{`⑩}{1}





%基本宏包
\RequirePackage{tabularray} % 表格
%\RequirePackage{booktabs} %表格
\UseTblrLibrary{booktabs} % 在 tabularray 中使用传统三线表 \toprule \midrule \bottomrule
\RequirePackage{threeparttable}  %表格注释 
\RequirePackage{tikz} % 绘图
\RequirePackage{graphicx} %图片png、jpg等
\RequirePackage{svg} %svg图片
\RequirePackage{mathdots} %添加斜向省略号
\RequirePackage{xcolor}%定义了一些颜色
\RequirePackage{enumerate} %列项序号编号
\RequirePackage{extarrows} %箭头等号上添加文字
\RequirePackage{amssymb} %数学公式符号
\RequirePackage{amsmath} %数学公式
\RequirePackage{mathtools} %数学公式扩展宏包,提供了公式编号定制和更多的符号、矩阵等。
\RequirePackage{cases} %使用括号对公式等进行并列排列
%\RequirePackage{amsthm}%证明定理等环境，与精细设定ntheorem有冲突
\RequirePackage{amsfonts} %用来输入各种符号的特殊形态，例如字母的花体、空心体等，配合amssymb使用
\RequirePackage{mathrsfs} %数学中的花体(不是太花的)
\RequirePackage[upright=true]{derivative}%分数导数微分偏微分增量改变量等 
\RequirePackage{braket} %量子算符宏包 
\RequirePackage{esint} % various fancy integral symbols %积分符号
\RequirePackage{enumitem}%列表

\RequirePackage{zhlipsum}%中文假文\zhlipsum[2-4]
\RequirePackage{lipsum}%英文徦文


%攻读学位期间论文发表环境
%\newlist{publications}{enumerate}{1}
%\setlist[publications]{label=[\arabic*],itemsep=3bp,resume,}
%已使用参考文献的 refsection 环境替代



\RequirePackage[bodytextleadingratio=1.9166]{zhlineskip} %设置正文行间距
%行距是指一行字体加空白区域的总距离，而不仅仅是间隔区域
%并且行距由字体大小决定，比如10号字体下的单倍行距为10*1.3 = 13 磅。
%正文字体小四号，为12磅，即「12bp」
%小四字体下1.25倍行距对应的bp数为12*1.3*1.25 
%
%正文行间距固定为23磅
%LaTeX正文基础行距1.2
%在一般情况下，CTEX 会默认用 linespread=1.3 这个文档类选项将中文的行距
%设置为字号的 1.56 倍（基础行距是字号的 1.2 倍，而 1.2 × 1.3 = 1.56）。
%对应的行间距倍数为 23/12=1.9166
%可通过\the\baselineskip查看当前行距
%其\baselineskip表示两行基准线之间的距离
%在英文中调整行间距
%一般用\renewcommand{\baselinestretch}{1.2} 或 \linespread{1.2}



\ctexset{
tocdepth = section, %目录编号层数
secnumdepth = subsubsection, %章节标题编号层数
appendix/numbering=true,
appendix/name = {附录},
%figurename = 图,
%tablename =表,
chapter = {
	pagestyle = my-body-style,
	name = {,、},
	format= \centering\zihao{-2}\heiti,
	aftername =,
	beforeskip=14.4bp, %0.8*18bp
	afterskip=14.4bp, %0.5*18bp %规定是0.5倍的行间距，怀疑弄错了，改为0.8倍
},
section = {
	name = {（,）},
	number = \chinese{section},
	format= \raggedright\zihao{4}\heiti,
	aftername =,
	beforeskip=7bp, %0.5*14bp
	afterskip=7bp, %0.5*14bp
},
subsection = {
	name = {,．},
	number = \arabic{section},
	format=\raggedright \zihao{-4}\heiti,
	aftername =,
	beforeskip=6bp, %0.5*12bp
	afterskip=6bp, %0.5*12bp
},
subsubsection = {
	name = {（,）},
	number = \arabic{section},
	format= \raggedright\zihao{-4}\heiti,
	aftername =,
	beforeskip=6bp, %0.5*12bp
	afterskip=6bp, %0.5*12bp
},
contentsname = 目\texttt{\char32}录,%这里只要一个空格既可，中英文会自动产生一个空格
}









%对图片表格标题和子标题的控制
%Figures, Subfigures and Tables
\RequirePackage{caption}
\RequirePackage{subcaption}

%图片、表格标题的设置

\captionsetup{font=normalsize,justification=centering}%图、表等标题用小四号
\captionsetup[sub]{font=normalsize,justification=centering}%图、表等标题用小四号
\captionsetup{labelsep=space} %表的标号与名字间的分隔
\DeclareCaptionFormat{my-tab}{\heiti #1#2#3\par}%表格标题特殊设置
\captionsetup[table]{format=my-tab}%表格标题特殊设置









%脚注使用带圈数字
%https://www.latexstudio.net/archives/51644.html

\newfontfamily\nmfont[Path=fonts/]{SH-number-Regular.otf} %安装后的字体名称 SH number Regular
%%定义带圈数字命令
\newcommand{\myquan}[1]{{\nmfont \symbol{#1}}}
\newcommand{\mykk}[1]{\myquan{\numexpr32+#1}}%\kk{<参数范围1-95>}96、97、98、99分别用\quan{196} \quan{197} \quan{199} \quan{201}
\newcommand*\mykkctr[1]{%
	\protect\mykk{\number\numexpr\value{#1}\relax}}


%这字体有个问题，显示无误，但对应的Unicode有问题，复制带圈文字会出错
%更好的是使用Source Han Serif 的字体
%方法如下
%\RequirePackage{fontspec,xunicode-addon}
%\newfontfamily\mynmfont{SH-number-Regular.otf}\setmainfont{Source Han Serif}
% {\mynmfont\textcircled{25}}
%这样Source Han Serif和textcircled配合，可以有很好的效果
%甚至可以用中文{\mynmfont\textcircled{中}}


%\numberwithin{footnote}{part} %令脚注的计数器与部挂钩
\counterwithout*{footnote}{chapter}%取消脚注计数器跟章节的关联


%设置脚注样式
\renewcommand*\thefootnote{\mykkctr{footnote}}

%在页面底部的脚注内容中，取消编号的上标样式
%https://zhuanlan.zhihu.com/p/74515148
\RequirePackage{xpatch}

% cancel the superscript style of counter used in footnote text
\xpatchcmd\@makefntext
{{\hss\@makefnmark}}
{{\hss\@makefnmark@nosuperscript}\space}
{}{\fail}

% old: superscript style
% \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}

% new: normal style, lower baseline
\def\@makefnmark@nosuperscript{\lower .0ex \hbox{\normalfont\@thefnmark}}

%注释与正文之间加细线分隔
% shorten footnote rule
\xpatchcmd\footnoterule
{.4\columnwidth}
{1.7in height 1bp } %线宽度为1磅，线的长度不应超过纸张的三分之一宽度
{}{\fail}

\renewcommand{\footnotesize}{\zihao{5}\songti} %脚注字宋体5号字





%
%参考文献
%

%旧方法
%参考 https://ctan.org/pkg/gbt7714 
%\RequirePackage[sort&compress]{gbt7714}
%\bibliographystyle{gbt7714-numerical}%选择参考文献样式「顺序编码制」
%需要使用 bibtex 引擎编译
%\bibliography{date/refer.bib} %参考文献相关文件，此句在需要生成参考文献的地方加入

%新方法
%参考 https://ctan.org/pkg/biblatex-gb7714-2015 
\RequirePackage[backend=biber, style=gb7714-2015, gbalign=gb7714-2015, gbpub=true]{biblatex}
%\addbibresource[location=local]{date/refer.bib} %参考文献源文件
\setlength{\biblabelsep}{3mm} %参考文标签和内容间的间隔
%需使用 biber 引擎编译
%\printbibliography[heading=bibliography,title=参考文献] %打印参考文献表，此句在需要生成参考文献的地方加入



%
%
%下面是本模板自定义的一些功能与命令
%采用LaTeX3语法编写
%
%


%基本信息键值对
\keys_define:nn { ZD_basic_information }
{
    thesis_type .tl_set:N  = \l_ZD_thesis_type_tl,
    thesis_title_zh .tl_set:N  = \l_ZD_thesis_title_zh_tl,
    student_name .tl_set:N  = \l_ZD_student_name_tl,
    student_number .tl_set:N  = \l_ZD_student_number_tl,
    teacher_name .tl_set:N = \l_ZD_teacher_name_tl,
    teacher_title .tl_set:N = \l_ZD_teacher_title_tl,
    college .tl_set:N = \l_ZD_college_tl,
    major .tl_set:N = \l_ZD_major_tl,
    complete_date .tl_set:N = \l_ZD_complete_date_tl,
    
    print_version .bool_set:N = \l_ZD_print_version_bool,
    
    % 初始值
    thesis_type .initial:n  = { 本科生毕业论文 },
    print_version .initial:n = {false},
}


%文档中基本信息填充名令
\NewDocumentCommand \BasicInfomation { m }
{
    \keys_set:nn { ZD_basic_information } { #1 }
}


%封面绘制
\NewDocumentCommand \CoverDraw { }
{
\thispagestyle{empty}
\begin{center}
\centering 
\includegraphics{picture/西藏大学-名字.png}\\\vspace{1cm}
\includegraphics{picture/西藏大学-校徽.png}\\\vspace{1.5cm}
{\zihao{1}\songti\textbf{ \tl_use:N \l_ZD_thesis_type_tl }}\\\vspace{3cm}
\zihao{3}
\songti\bfseries
\begin{tblr}{
			colspec={cm{0.5\ccwd}ccm{0.5\ccwd}c},
			%hline{1,7} = {1pt,solid},
			rows = {abovesep=8pt,belowsep=-1pt},
		} 
		\makebox[4em][s]{{\zihao{3}院系}}&：& \SetCell[c=4]{c} {\zihao{4}\makebox[15\ccwd][c]{ \tl_use:N \l_ZD_college_tl }} &&& \\\cline{3-6}
		\makebox[4em][s]{{\zihao{3}专业年级}}&：&\SetCell[c=4]{c} {\zihao{4}\makebox[15\ccwd][c]{ \tl_use:N \l_ZD_major_tl }}&&& \\\cline{3-6}
		\makebox[4em][s]{{\zihao{3}题目}}&：&\SetCell[c=4]{c} {\zihao{4}\makebox[15\ccwd][c]{ \tl_use:N \l_ZD_thesis_title_zh_tl }}&&& \\\cline{3-6}
		\makebox[4em][s]{{\zihao{3}学生姓名}}&：& {\zihao{4}\makebox[6\ccwd][c]{ \tl_use:N \l_ZD_student_name_tl }}&学号&：&{\zihao{4}\makebox[4\ccwd][c]{  \tl_use:N \l_ZD_student_number_tl  }} \\\cline{3-3}\cline{6-6}
		\makebox[4em][s]{{\zihao{3}指导教师}}&：&{\zihao{4}\makebox[6\ccwd][c]{ \tl_use:N \l_ZD_teacher_name_tl }}&职称&：&{\zihao{4}\makebox[4\ccwd][c]{  \tl_use:N \l_ZD_teacher_title_tl  }} \\\cline{3-3}\cline{6-6}
		\makebox[4em][s]{{\zihao{3}完成时间}}&：&\SetCell[c=4]{c} {\zihao{4}\makebox[15\ccwd][c]{ \tl_use:N \l_ZD_complete_date_tl }}&&& \\\cline{3-6}
\end{tblr}
\end{center}
\clearpage

\bool_if:NTF {\l_ZD_print_version_bool}
{
	%若为真，则需加入空白页
	\thispagestyle{empty} \null \newpage % 插入空白页
}
{
	\newpage
}

}





%声明
\NewDocumentCommand \AuthorStatement { }
{
\thispagestyle{empty}
\begin{center}
	\songti\zihao{2}
	\nobreakspace\\
	\nobreakspace\\ %空二行
	\textbf{郑 \hspace{0.5\ccwd} 重 \hspace{0.5\ccwd} 声 \hspace{0.5\ccwd} 明}
\end{center}
\par
{\zihao{4}
{
\linespread{1.92}\selectfont            %2倍行距
\vspace*{1cm}
本人呈交的学位论文，是在导师的指导下，独立进行研究工作所取得的成果，所有数据、图片资料真实可靠。尽我所知，除文中已经注明引用的内容外，本学位论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体，均已在文中以明确的方式标明。本学位论文的知识产权归属于培养单位。
\par}
\vspace{4.5cm}
\noindent 本人签名：\underline{\hspace{44.45mm}} \hfill 日期：\underline{\hspace{44.45mm}}%
}
\clearpage

\bool_if:NTF {\l_ZD_print_version_bool}
{
	%若为真，则需加入空白页
	\thispagestyle{empty} \null \newpage % 插入空白页
}
{
	\newpage
}

}




%中文摘要
\NewDocumentCommand \ZhAbstract {mm}
{
\pagestyle{empty}
\begin{center}
	\heiti\zihao{-2}
	\nobreakspace\\ %空一行
	摘\texttt{\char32}要 %这里只要一个空格既可，中英文会自动产生一个空格
\end{center}
{\linespread{1.5}\selectfont %1.5倍行距
	\nobreakspace\par %空一行
	#1
\par}
\nobreakspace\\ %空一行
\noindent {\heiti 关键词}： #2
\clearpage
}




%英文摘要
\NewDocumentCommand \EnAbstract { mm }
{
\pagestyle{empty}
\begin{center}
	\zihao{2}
	\nobreakspace\\ %空一行
	\textbf{Abstract}
\end{center}
{\linespread{1.5}\selectfont %1.5倍行距
	\nobreakspace\par %空一行
	#1
\par}
\nobreakspace\\ %空一行
\noindent {\textbf{Key words}}： #2 
\clearpage
}



%目录
\AtBeginDocument{\addtocontents{toc}{\protect\thispagestyle{empty}}} 
%目录自动创建
\NewDocumentCommand \TOCautoCreate {  }
{
	\pagestyle{empty}
	\tableofcontents
	\clearpage
	\setcounter{page}{1}
	\pagestyle{my-body-style}
}


%结论
\newcommand{\Conclude}{
\chapter*{\texorpdfstring{结论}{结论}}
\phantomsection %让超链接能够正确链接，一般是加入目录用
\addcontentsline{toc}{chapter}{\texorpdfstring{结论}{结论}}
}


%参考文献
%需要使用bibtex引擎编译
\NewDocumentCommand \RefautoCreate {  }
{
\clearpage
\phantomsection %让超链接能够正确链接，一般是加入目录用
\addcontentsline{toc}{chapter}{参考文献}
\printbibliography[heading=bibliography,title=参考文献] %打印参考文献表
\clearpage
%设置相关科研成果目录和致谢的标题
\ctexset{
chapter/numbering=false,
section/numbering=false,
subsection/numbering=false,
subsubsection/numbering=false,
}
}


%相关科研成果目录和致谢的标题也可以手动设置
%例如
%\chapter*{\texorpdfstring{致\hspace{2\ccwd}谢}{致谢}}
%\phantomsection %让超链接能够正确链接，一般是加入目录用
%\addcontentsline{toc}{chapter}{\texorpdfstring{致谢}{致谢}}







%附录

\NewDocumentCommand{\Appendix}{ }
{
\appendix%附录开始
%附录前面需加入\appendix命令
\ctexset{
chapter/numbering=true,
section = {
	name = {,\ },
	number =\Alph{chapter}.\arabic{section},
	numbering=true,
},
subsection = {
	name = {,\ },
	number =\Alph{chapter}.\arabic{section}.\arabic{subsection},
	numbering=true,
},
subsubsection = {
	name = {,\ },
	number =\Alph{chapter}.\arabic{section}.\arabic{subsection}.\arabic{subsubsection},
	numbering=true,
},}
}
